package com.zmn.oms.common.dio.normal;

import com.zmn.common.constant.GateTypeConsts;
import com.zmn.common.constant.GlobalConsts;
import com.zmn.oms.common.dio.normal.remark.CommonRemarkDIO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.ToString;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.util.Date;
import java.util.List;

/**
 * 类描述：工单公共信息
 *
 * @author wangxiaokun
 * @since 2021/04/01 14:42
 */
@Data
@ToString()
@ApiModel("工单基础信息")
public class OrderWorkBaseDIO implements Serializable {

    private static final long serialVersionUID = -3379120542465276940L;

    /**
     * 订单id
     */
    @ApiModelProperty(value = "订单id", required = true)
    @NotNull(message = "订单id不能为空")
    private Long orderId;

    /**
     * 工单id
     */
    @ApiModelProperty(value = "工单id", required = true)
    @NotNull(message = "工单id不能为空")
    private Long workId;

    /**
     * 平台
     */
    @ApiModelProperty(value = "平台", required = true)
    @NotNull(message = "平台不能为空")
    private Integer plat;

    /**
     * 服务平台
     */
    @ApiModelProperty("服务平台")
    private Integer platWork;

    /**
     * 业务类型
     */
    @ApiModelProperty(value = "业务类型", required = true)
    @NotNull(message = "业务类型不能为空")
    private Integer bizType;

    /**
     * 渠道id
     */
    @ApiModelProperty(value = "渠道", required = true)
    @NotNull(message = "渠道不能为空")
    private Integer channelId;

    /**
     * 来源渠道id
     */
    @ApiModelProperty("来源渠道")
    private Integer sourceChannelId;

    /**
     * 来源类型
     * @see com.zmn.oms.common.constant.OrderConsts#ORDER_SOURCE_TYPE_NORMAL
     */
    @ApiModelProperty("来源类型")
    private Integer sourceType;

    /**
     * 订单类型：1 新单、2 返修单
     */
    @ApiModelProperty(value = "订单类型", required = true)
    @NotNull(message = "订单类型不能为空")
    private Integer type;

    /**
     * 订单客户备注
     */
    @Size(max = 5000, message = "备注最多5000个字符")
    private String remark;

    /**
     * 返修订单ID
     */
    @ApiModelProperty("返修订单ID")
    private Long reworkId;

    /**
     * 源头订单ID
     */
    @ApiModelProperty("源头订单ID")
    private Long originalId;

    /**
     * 预约时间
     */
    @ApiModelProperty("预约时间")
    private Date dutyTime;

    /**
     * 服务分类id
     */
    @ApiModelProperty("服务分类")
    private Integer servCategId;

    /**
     * 产品分类id（二级分类）
     */
    @ApiModelProperty("二级分类")
    private Integer categId;

    /**
     * 工单录入方式：1后台人工录入、2微信/H5、 3接口(114,号百,360等)
     */
    @ApiModelProperty("工单录入方式")
    private Integer inputType;

    /**
     * 下单入口
     *
     * @see GateTypeConsts
     */
    @ApiModelProperty("下单入口")
    private Integer receiveEntranceId;

    /**
     * 下单方式 1:人工录入 2：接口录入
     */
    @ApiModelProperty("下单方式")
    private Integer receiverManner;

    /**
     * 预分配服务公司 id
     */
    @ApiModelProperty("预分配服务公司 id")
    private Integer preManageCompanyId;

    /**
     * 预分配服务公司名称
     */
    @ApiModelProperty("预分配服务公司名称")
    private String preManageCompanyName;

    /**
     * 下单时间
     */
    @ApiModelProperty("下单时间")
    private Date createTime;

    /**
     * 是否是测试单
     *  1：否  2：是  为空时，默认为1
     */
    @ApiModelProperty(value = "是否是测试单")
    private Integer test = GlobalConsts.NO;

    /**
     * 订单标签ID
     */
    @ApiModelProperty(value = "订单标签ID")
    private List<Integer> orderTagIdList;

    /**
     * 专题活动ID
     */
    @ApiModelProperty(value = "专题活动ID")
    private Integer activityId;

    /**
     * 行政子公司id
     */
    @ApiModelProperty(value = "行政子公司id")
    private Integer gridCompanyId;

    /**
     * 行政服务商id
     */
    @ApiModelProperty(value = "行政服务商id")
    private Integer gridManageCompanyId;

    /**
     * 下单备注
     */
    @ApiModelProperty("常见备注备注")
    @Size(max = 500)
    private List<CommonRemarkDIO> commonRemarkList;
}
